#pragma once

#include "ratfRPC.pb.h"

namespace raftStoreDataBase
{
    /**
     * @brief 这个类是客户端发起远程过程调用的类，需要通过代理stub来发送，并且代理也需要初始化
        使用MyRpcChannel类
     *
     */
    class raftStub
    {
    public:
        raftStub( std::string ip, short port );
        ~raftStub();
        bool AppendEntries( raftRpcProtoc::AppendEntriesArgs *args, raftRpcProtoc::AppendEntriesReply *response );
        bool RequestVote( raftRpcProtoc::RequestVoteArgs *args, raftRpcProtoc::RequestVoteReply *response );
        bool InstallSnapshot( raftRpcProtoc::InstallSnapshotRequest *args, raftRpcProtoc::InstallSnapshotResponse *response );

    private:
        raftRpcProtoc::raftRpc_Stub *m_stub;  // 这是rpc代理，rpc代理通过myrpcChannel来进行初始化
    };
}  // namespace raftStoreDataBase